<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // generator函数可以通过yield关键字，将函数挂起，为了改变执行流提供可能，同时为了做异步编程提供了方案
        // 它与普通函数的区别
        // 1.function后面  函数名之前有个*
        // 2.只能在函数内部使用yield表达式，让函数挂起
        // function* func(){
        //     console.log('one');
        //     yield 2;
        //     console.log('two');
        //     yield 3;
        //     console,log('end');
        // }
        // // 返回一个遍历器对象，可以调用next()
        // let fn=func();
        // console.log(fn.next());
        // console.log(fn.next());

        // // 总结，generator函数是分段执行的，yield语句是暂停执行而next()是恢复执行



            function* add(){
                console.log('start');
                 // x可真的不是yield '2'的返回值，它是next()调用恢复当前yield()执行传入的实参
                let x=yield '2';
                console.log('one'+x);
                let y=yield '3';
                console.log('two:'+y);
                return x+y
            }
            const fn =add();
            console.log(fn.next());
            console.log(fn.next(20));
            console.log(fn.next(30));
       
    </script>
</body>
</html>